home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / PowerFantasm™ 4.19a / Beginners guide / GUIDE EXAMPLES / EXAMPLE9.S < prev    next >
Text File  |  1997-04-01  |  3KB  |  94 lines

  1. ********************************************************************************
  2. *EXAMPLE 9 - CLEARING THE SCREEN                                               *
  3. *AUTHOR    - STUART BALL JULY 94                                               *
  4. *SCREEN MUST BE SET TO 256 COLOUR MODE FOR THIS EXAMPLE                        *
  5. ********************************************************************************
  6. SCREENROW:    EQU    $0106    *WIDTH OF EACH SCREEN LINE
  7. DEVICELIST:    EQU    $08A8    *THE ADDRESS OF DEVICELIST
  8. gdPMap_offset:    EQU    22
  9. EXAMPLE8:    MOVEM.L    A5-A6,-(SP)    *SAVE MAC WORLD
  10.     BSR    INIT    *INITIALISE OUR VARIABLES
  11.     BSR    CLS    *CLEAR THE SCREEN
  12.  
  13.     MOVE.L    #10,D0    *START X COORD OF LINE
  14.     MOVE.L    #200,D1    *Y COORDINATE OF LINE
  15.     MOVE.B    #20,D2    *COLOUR OF LINE
  16.     MOVE.L    #600,D3    *END X COORDINATE OF LINE
  17.     BSR    DRAW_H_LINE    *DRAW A HORIZONTAL LINE
  18.     MOVEM.L    (SP)+,A5-A6    *RESTORE MAC WORLD
  19.     RTS
  20. ************************END OF EXAMPLE 9***************************************
  21. **INIT SETS UP OUR VARIABLES
  22. INIT:    LEA    MY_VARS(PC),A6    *A6 IS OUR VARIABLE POINTER
  23.     MOVE.L    DEVICELIST,A0
  24.     MOVE.L    (A0),A0        *POINT TO DEVICELIST
  25.     MOVE.L    A0,A1        *COPY ADDRESS OF DEVICE LIST
  26.     MOVE.L    gdPMap_offset(A1),A1    *A1=POINTER TO GDPMAP
  27.     MOVE.L    (A1),A1        *gdPMap IN A1
  28.     MOVE.W    10(A1),NUMB_OF_LINES(A6)    *SAVE NUMBER OF LINES
  29.     MOVE.L    (A1),VRAM_ADDR(A6)    *SAVE VRAM ABSOLUTE ADDRESS
  30.     RTS
  31.     
  32. **CLS CLEARS THE MAC SCREEN TOTALLY
  33. **PRESERVES ALL REGISTERS
  34. CLS:    MOVEM.L    D0-D2/A1,-(SP)    *SAVE REGS
  35.     
  36.     CLR.L    D0
  37.     CLR.L    D1
  38.     CLR.L    D2
  39.     
  40.     MOVE.L    VRAM_ADDR(A6),A1    *VRAM ADDRESS IN A1
  41.     MOVE.W    NUMB_OF_LINES(A6),D0    *NUMBER OF LINES ON SCREEN
  42.     SUBQ.W    #1,D0        *DBcc ALWAYS LOOPS ONE MORE THAN THE COUNT
  43.     MOVE.W    SCREENROW,D1    *WIDTH IN BYTES OF EACH LINE
  44.     LSR.W    #2,D1        *DIVIDE BY FOUR AS WERE CLEARING LONGS
  45.     SUBQ.W    #1,D1        *DBRA ALWAYS LOOPS 1 MORE THAN THE COUNT!
  46.     MOVE.W    D1,D2        *SAVE SIZE OF LINE(IN BYTES)
  47.  
  48. NEXT_LINE:
  49. CLEAR_LINE:    CLR.L    (A1)+    *CLEAR THIS BYTE OF VRAM AND POINT TO NEXT
  50.     DBRA    D1,CLEAR_LINE    *CLEAR THIS LINE
  51.     MOVE.W    D2,D1        *RESET BYTES/LINE COUNTER
  52.     DBRA    D0,NEXT_LINE    *CLEAR NEXT LINE
  53.     
  54.     MOVEM.L    (SP)+,D0-D2/A1    *RESTORE REGS
  55.     RTS
  56.  
  57. **DRAW_H_LINE DRAWS A HORIZONTAL LINE.
  58. **NEEDS START X COORDINATE IN D0
  59. **            Y COORDINATE IN D1
  60. **            LINE COLOUR IN D2
  61. **            END X COORDINATE IN D3
  62. DRAW_H_LINE:    MOVE.L    VRAM_ADDR(A6),A1    *FOR PLOT
  63. DHL_LOOP:    BSR    PLOT    *PLOT THIS PIXEL
  64.     ADD.W    #1,D0        *INC X COORDINATE
  65.     CMP.W    D3,D0        *COMPARE WITH END COORDINATE
  66.     BNE    DHL_LOOP    *IF NOT THERE YET, DRAW NEXT PIXEL
  67.     RTS
  68.     
  69. **PLOT IS A SUBROUTINE THATS PLOTS A PIXEL ON THE SCREEN IN THE COLOUR HELD IN D2
  70. **NEEDS D0.W = X COORDINATE
  71. **      D1.W = Y COORDINATE
  72. **      D2.B = THE COLOUR
  73. **      A1   = VRAM BASE ADDRESS
  74. **ALL REGISTERS REMAIN UNAFFECTED
  75.  
  76. PLOT:    MOVEM.L    D0-D3/A1,-(SP)    *SAVE THE REGISTERS WE USE
  77.     MOVE.W    SCREENROW,D3    *GET PHYSICAL LENGTH OF EACH SCREEN LINE
  78.     MULS    D3,D1    *Y COORDINATE TIMES THE LENGTH OF EACH LINE
  79.     ADD.L    D0,D1    *VRAM ADDRESS OF THIS PIXEL
  80.     ADD.L    D1,A1    *ABSOLUTE ADDRESS OF THIS PIXEL
  81.     MOVE.B    D2,(A1)    *SET THE PIXEL TO THE COLOUR IN D2
  82.     MOVEM.L    (SP)+,D0-D3/A1    *RESTORE THE REGS TO HOW THEY WERE
  83.     RTS        *END OF SUBROUTINE PLOT
  84.     
  85.  
  86. *********************************VARIABLES FOLLOW********************************
  87.  
  88. MY_VARS:    DS.B    20    *SPACE FOR OUR VARIABLES
  89.  
  90. ******************************OFFSETS INTO VARIABLES*****************************
  91.  
  92. NUMB_OF_LINES:    EQU    0    .W NUMBER OF PHYSICAL LINES ON SCREEN    
  93. VRAM_ADDR:        EQU    2    .L ABSOLUTE ADDRESS OF VRAM
  94.